package com.sqx.modules.goods.entity;

import com.baomidou.mybatisplus.annotation.FieldStrategy;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.sqx.modules.recovery.entity.GoodsSpecifications;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 *
 * 商品
 *
 * @author wuChang
 * @since 2024-05-30
 */
@Data
public class Goods implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 商品id
     */
    @ApiModelProperty("商品id")
    @TableId(value = "good_id", type = IdType.AUTO)
    private Long goodId;

    /**
     * 商品名称
     */
    @ApiModelProperty("商品名称")
    private String goodName;

    /**
     * 标签id
     */
    @ApiModelProperty("标签id")
    private Long labelId;

    /**
     * 类型id
     */
    @ApiModelProperty("类型id")
    private Long typeId;

    /**
     * 用户id
     */
    @ApiModelProperty("用户id")
    private Long userId;

    /**
     * 商品描述
     */
    @ApiModelProperty("商品描述")
    private String goodTitle;

    /**
     * 封面图
     */
    @ApiModelProperty("封面图")
    @TableField(updateStrategy = FieldStrategy.NOT_NULL)
    private String coverImg;

    /**
     * 描述图
     */
    @ApiModelProperty("描述图")
    @TableField(updateStrategy = FieldStrategy.NOT_NULL)
    private String descImg;

    /**
     * 经度
     */
    @ApiModelProperty("经度")
    private Double lng;

    /**
     * 纬度
     */
    @ApiModelProperty("纬度")
    private Double lat;

    /**
     * 省
     */
    @ApiModelProperty("省")
    private String province;

    /**
     * 市
     */
    @ApiModelProperty("市")
    private String city;

    /**
     * 区
     */
    @ApiModelProperty("区")
    private String district;

    /**
     * 详细地址
     */
    @ApiModelProperty("详细地址")
    private String address;

    /**
     * 标价
     */
    @ApiModelProperty("标价")
    private BigDecimal goodPrice;

    /**
     * 库存
     */
    @ApiModelProperty("库存")
    private Integer stock;
    /**
     * 已售数量
     */
    @ApiModelProperty("已售数量")
    private Integer outStock;
    /**
     * 浏览量
     */
    @ApiModelProperty("浏览量")
    private Integer browseCount;

//    @TableField(typeHandler = DataJsonListTypeHandler.class)
//    @ApiModelProperty(name = "其他字段")
//    private List<DataJsonVo> dataJson;
    /**
     * 状态 0待审核 1审核通过 2审核未通过 3已售空 4已封禁
     */
    @ApiModelProperty("状态 0待审核 1审核通过 2审核未通过 3已售空 4已封禁")
    private Integer status;
    /**
     * 上下架状态 0下架 1上架
     */
    @ApiModelProperty("上下架状态 0下架 1上架")
    private Integer isEnable;
    /**
     * 是否包邮 0否 1是
     */
    @ApiModelProperty("是否包邮 0否 1是")
    private Integer isFreeMail;

    /**
     * 审核时间
     */
    @ApiModelProperty("审核时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime authTime;

    /**
     * 审核备注
     */
    @ApiModelProperty("审核备注")
    private String authRemark;

    /**
     * 创建时间
     */
    @ApiModelProperty("创建时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime createTime;

    /**
     * 统计有多少人想要这件商品
     */
    @TableField(exist = false)
    @ApiModelProperty("统计有多少人想要这件商品")
    private int needCount;

    /**
     * 任务表id
     */
    @ApiModelProperty("任务表id")
    private Long taskId;

    /**
     * 精选推荐：0不推荐  1推荐
     */
    @ApiModelProperty("精选推荐：0不推荐  1推荐")
    private Integer isRecommend;

//    /**
//     * 商品规格id
//     */
//    @ApiModelProperty("商品规格id")
//    private List<String> skuId;
//
//    @ApiModelProperty("商品规格的值")
//    private List<String> skuValue;

    /**
     * 商品规格
     */
    @TableField(exist = false)
    private List<SkuIdAndValue> skuList;
    /**
     * 品牌id
     */
    @ApiModelProperty("品牌id")
    private Long brandId;

    /**
     * 是否回收商品：1是  0否
     */
    @ApiModelProperty("是否回收商品：1是  0否")
    private Integer goodStatus;

    /**
     * 新旧程度表id
     */
    @ApiModelProperty("新旧程度表id")
    private Long degreeId;

    /**
     * 邮费
     */
    @ApiModelProperty("邮费")
    private BigDecimal freeMoney;

    /**
     * 发货方式：0邮寄  1包邮  2自取
     */
    @ApiModelProperty("发货方式：0邮寄  1包邮  2自取")
    private Integer delivery;

    /**
     * 用户名
     */
    @ApiModelProperty("用户名")
    @TableField(exist = false)
    private String userName;

    /**
     * 头像
     */
    @ApiModelProperty("头像")
    @TableField(exist = false)
    private String avatar;

    /**
     * 新旧程度
     */
    @TableField(exist = false)
    @ApiModelProperty("新旧程度")
    private String degreeName;

    /**
     * 品牌名称
     */
    @TableField(exist = false)
    @ApiModelProperty("品牌名称")
    private String brandName;

    /**
     * 物品（机型）id
     */
    @ApiModelProperty("物品（机型）id")
    private Long recoveryId;

    /**
     * 机型名称
     */
    @TableField(exist = false)
    @ApiModelProperty("机型名称")
    private String recoveryName;

    /**
     * 视频路径
     */
    @ApiModelProperty("视频路径")
    @TableField(updateStrategy = FieldStrategy.NOT_NULL)
    private String videos;

    /**
     * 规格id
     */
    @ApiModelProperty("规格id")
    @TableField(exist = false)
    private Long YtypeId;

    /**
     * 是否置顶商品：1是 0否
     */
    @ApiModelProperty("是否置顶商品：1是 0否")
    private Integer isTop;

    /**
     * 置顶开始时间
     */
    @ApiModelProperty("置顶开始时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date topStartTime;

    /**
     * 置顶结束时间
     */
    @ApiModelProperty("置顶结束时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date topEndTime;

    /**
     * 距离
     */
    @ApiModelProperty("距离")
    @TableField(exist = false)
    private Double distance;

    @TableField(exist = false)
    private Map<String,Object> params;


    /**
     * 规格列表
     */
    @TableField(exist = false)
    @ApiModelProperty("规格列表")
    private List<GoodsSpecifications> specifications;

    /**
     * 是否有库存 1否 2是
     */
    @ApiModelProperty("是否有库存 1否 2是")
    private Integer isStock;

    /**
     * 商品是否是库存商品并且已回收：1已回收 2未回收
     */
    @ApiModelProperty("商品是否是库存商品并且已回收：1已回收 2未回收")
    private Integer recycleStatus;

    /**
     * 商品回收价格
     */
    @ApiModelProperty("商品回收价格")
    private BigDecimal receivedPrice;

    /**
     * 库存管理id
     */
    @ApiModelProperty("库存管理id")
    private Long stockId;

    /**
     * 是否库存商品：1是 2否
     */
    @ApiModelProperty("是否库存商品：1是 2否")
    private Integer stockStatus;
}
